package cn.piesat.controller;

import cn.piesat.dto.PiesatExterloginConfigDTO;
import cn.piesat.service.intf.PiesatExterloginConfigService;
import cn.piesat.util.ResponseWrapperUtil;
import com.alibaba.fastjson.JSON;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

/**
 * 	第三方登录配置信息相关控制访问接口
 * @author 奚好雷
 *
 */
@RestController
@RequestMapping("/manager/exterlogin")
public class PiesatExterloginConfigController {
	
	@Autowired
	private PiesatExterloginConfigService service;
	
	/**
	 * 添加配置信息
	 * @param json
	 * {
	 * 		"appId":"", 用户标识
	 * 		"secret":"",公钥
	 * 		"privateSecret:"",私钥
	 * 		"platForm":"",平台类型
	 *      "description":"",备注
	 * }
	 * @return
	 */
	@PostMapping("/add")
	public String addMessage(@RequestBody String json) {
		PiesatExterloginConfigDTO dto = JSON.parseObject(json, PiesatExterloginConfigDTO.class);
		dto.setEnableState(1);
		try {
			List<PiesatExterloginConfigDTO> dtos = service.findByPlatForm(dto.getPlatForm());
			if(!dtos.isEmpty()) {
				return ResponseWrapperUtil.executeCustomTips("false", "该平台配置已存在,不允许重复添加");
			}
			service.add(dto);
		} catch (Exception e) {
			return ResponseWrapperUtil.executeCustomTips("false", "添加失败");
		}
		return ResponseWrapperUtil.executeCustomTips("true", "添加成功");
	}
	
	/**
	 * 修改配置信息，如果启用的信息 放入redis中存储
	 * @param json
	 * {
	 * 		"id":"",
	 * 		"appId":"", 用户标识
	 * 		"secret":"",公钥
	 * 		"privateSecret":"",私钥
	 * 		"platForm":"",平台类型
	 * 		"enableState": 0 启用 1禁用
	 *      "description":"",备注
	 * }
	 * @return
	 */
	@PostMapping("/update")
	public String updateMessage(@RequestBody String json) {
		PiesatExterloginConfigDTO dto = JSON.parseObject(json, PiesatExterloginConfigDTO.class);
		try {
			PiesatExterloginConfigDTO reDTO = service.update(dto);
			if(reDTO == null) {
				return ResponseWrapperUtil.executeCustomTips("false", "该配置信息不存在，无法修改");
			}
		} catch (Exception e) {
			return ResponseWrapperUtil.executeCustomTips("false", "修改失败");
		}
		return ResponseWrapperUtil.executeCustomTips("true", "修改成功");
	}
	
	/**
	 * 	查询所有信息
	 * @return
	 */
	@GetMapping("/findAll/{pageNum}/{pageSize}")
	public String findAll(@PathVariable("pageNum")Integer pageNum,
						  @PathVariable("pageSize")Integer pageSize) {
		if(pageNum < 0){
			pageNum = 0;
		}
		if(pageSize < 0){
			pageSize = 8;
		}
		Map<String, Object> all = service.findAll(pageNum, pageSize);
		return ResponseWrapperUtil.executeResultMap(all);
	}
	
	/**
	 * 	根据平台类型查询配置信息
	 * @param page 页数
	 * @param size 每页数量
	 * @return
	 */
	@GetMapping("/find/{page}/{size}")
	public String findAllPage(@PathVariable("page")Integer page,
								 @PathVariable("size")Integer size) {
		if (page < 0) {
			page = 0;
		}
		if (size <= 0) {
			size = 8;
		}
		Map<String, Object> resultMap = service.findAllPage(page,size);
		return ResponseWrapperUtil.executeResultMap(resultMap);
	}
	
	/**
	 * 	根据ID删除配置信息
	 * @param id
	 * @return
	 */
	@DeleteMapping("/del/{id}")
	public String del(@PathVariable("id")String id) {
		try {
			service.delById(id);
		} catch (Exception e) {
			return ResponseWrapperUtil.executeCustomTips("false", "删除失败");
		}
		return ResponseWrapperUtil.executeCustomTips("true", "删除成功");
	}
	
	/**
	 * 	根据状态查询的平台类型（用于显示第三方登录列表）
	 * @param state 0 启用 1 禁用
	 * @return
	 */
	@GetMapping("/findEnable/{state}")
	public String findByEnableState(@PathVariable("state")Integer enableState) {
		List<PiesatExterloginConfigDTO> list = service.findByEnableState(enableState);
		List<String> resList = new ArrayList<>();
		for (int i = 0; i < list.size() ; i++) {
			resList.add(list.get(i).getPlatForm());
		}
		return ResponseWrapperUtil.executeResultList(resList);
	}
}
